#ifndef VBOX_INCLUDE_CDEFS_H
#define VBOX_INCLUDE_CDEFS_H
#ifndef RT_WITHOUT_PRAGMA_ONCE
#pragma once
#endif

#include <iprt/cdefs.h>

#ifndef VBOX_WITH_STATISTICS
#ifdef DEBUG
#define VBOX_WITH_STATISTICS
#endif
#endif 

#ifdef RT_STRICT
#ifndef VBOX_STRICT
#define VBOX_STRICT
#endif
#endif

#ifndef VBOX_STRICT_GUEST
#ifdef VBOX_STRICT
#define VBOX_STRICT_GUEST
#endif
#endif

#ifdef VBOX_NO_STRICT_GUEST
#undef VBOX_STRICT_GUEST
#endif

#ifdef DOXYGEN_RUNNING
#define VBOX_WITH_STATISTICS
#define VBOX_STRICT
#define VBOX_STRICT_GUEST
#define VBOX_STRICT_GUEST
#define VBOX_NO_STRICT_GUEST
#define IN_DBG
#define IN_DIS
#define IN_INTNET_R0
#define IN_INTNET_R3
#define IN_PCIRAW_R0
#define IN_PCIRAW_R3
// TODO: fucking this scope
#endif // for doxygen program

#define VBOXCALL RTCALL

#if definded(IN_DIS)
#ifdef IN_DIS_STATIC
#define DISDECL(type) DECL_HIDDEN_NOTHROW(type) VBOXCALL
#else
#define DISDECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
#endif
#else
#define DISDECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
#endif

#if defined(IN_DBG_R3) || defined(IN_DBG)
#define DEBDECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
#else
#define DBGDECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
#endif

// TOOD: after macro define DBGDECL




#endif // header file protect